#' Online moving average
#'
#' @param period Rolling window period
#' @param fast_period fast rolling window period, used in vidya and kama
#' @param slow_period slow rolling window period, used in vidya and kama
#' @param type type of the moving average
#'
#' @return a stateful function
#' @export
#'
new_ma <- function(period, fast_period, slow_period,
                   type = c("sma", "cma", "tma", "wma", "hma",
                            "ema", "dema", "tema", "t3ma", "ewma",
                            "zlema", "wilders", "vwma", "evwma",
                            "vidya", "kama", "mae", "trix"))
{
  type <- match.arg(type)
  switch(type,
         cma     = mk_online_func_x("cma"),
         sma     = mk_online_func_x("sma", period),
         tma     = mk_online_func_x("tma", period),
         wma     = mk_online_func_x("wma", period),
         hma     = mk_online_func_x("hma", period),
         ema     = mk_online_func_x("ema", period),
         dema    = mk_online_func_x("dema", period),
         tema    = mk_online_func_x("tema", period),
         t3ma    = mk_online_func_x("t3ma", period),
         ewma    = mk_online_func_x("ewma", period),
         zlema   = mk_online_func_x("zlema", period),
         wilders = mk_online_func_x("wilders", period),
         vwma    = mk_online_func_xw("vwma", period),
         evwma   = mk_online_func_xw("evwma", period),
         vidya   = mk_online_func_x("vidya", fast_period, slow_period),
         kama    = mk_online_func_x("kama", fast_period, slow_period),
         mae     = mk_online_func_x("mae", period),
         trix    = mk_online_func_x("trix", period))
}
